Snowflake Notebooksを使ってみた
こんちには。
データアナリティクス事業本部 機械学習チームの中村(nokomoro3)です。
今回はSnowflake Notebooksがプレビューとなりましたので使ってみたいと思います。
特徴
主な特徴は以下の通りです。
- Snowflake上でいわゆるJupyter Notebookが使える
- NotebookのセルはSQLとPythonが使用でき、相互に結果を受け渡しできる(一部)
- Gitと連携してNotebookを管理できる
注意点としては以下が挙げられます。
- NotebookをActive Session状態にしている場合、WHが稼働中となるため処理をしていなくともクレジットを消費
- Worksheetは処理を実行した際に料金が発生するので少し違いがあります
使ってみる
準備
トライアルアカウントを使用します。以下の記事にある「Snowflake のサインイン」の部分を実施ください。
以降はサインイン済みとして進めます。
Notebookの起動方法
ログイン後「Create」を押下すると、Notebookというものがあるので、そちらから起動できます。
すると以下のような画面となります。Notebookの保存先として、DatabaseとSchemaを作成する必要があります。
データベースとして CM_NAKAMURA_EXAMPLE
を作成し、スキーマとして NOTEBOOK
を作成して設定します。
作成すると、以下のようにサンプルのNotebookが作成されたような状態となります。
作成されたものを少し細かく見てみる
よく見ると以下の2つが作成されています。
environment.yml
notebook_app.ipynb
notebook_app.ipynb
がNotebookの実体で、 environment.yml
はcondaのパッケージ管理をするあのファイルと推察されます。
中身は以下のようになっていました。(channelsはsnowflakeなのですね、知らなかった)
environment.yml
は編集することはできず、右上の「Packages」を操作するとこの environment.yml
が変更される感じとなっているようです。
私の好きなpolarsも追加することができました。
サンプルを動かしてみる
実際にサンプルのNotebookを上から動かしてみます。右上の「Start」を押下することで実行環境が立ち上がるようです。なにも操作が行われない状態が60分継続するとシャットダウンするようです。
しばらく待つと「Active」表示に変わり、裏でWHが立ち上がっているのを感じられます。つまりクレジットが消費されます。
ここで「Run all」を押下すると、Notebookのすべてのセルが実行されます。
最初のセル cell1
は以下のようになっており、Snowparkを使用するための処理が走っているようです。
cell2
はSQLの処理となっています。
cell3
は cell2
の結果をPython側で受け取り、それを元にStreamlitの機能でグラフを描画しています。
cell2.to_pandas()
とすることでPandasのDataFrameとして取得できるようですね。
(シンプルに to_df
とすると、SnowparkのDataFrameとなるようです)
また cell2
というセルの名前は変更することも可能です。以下のようにセル名を変更して分かりやすい名前にして取得することもできます。
セル間でデータを参照してみる
ドキュメントとしては以下に記載されています。
前述ののようにPythonセルからSQLセルの結果を参照することは to_df
や to_pandas
を用いることでできます。
polarsで処理をしたいという強い気持ちがあるので、polarsの from_pandas
で読み込んでみたいと思います。
無事に読み込むことができました。
SQLセルからSQLセルの結果を参照するには、Jinjaで呼び出すことができるようです。
SQLセルからPythonセルの参照は、Python変数を参照することは可能なようです。
SQLセルからPythonセルのDataFrameを参照する方法は残念ながらまだ方法が分からなかったです。
Notebookのエクスポート
notebook_app.ipynb
は右上からエクスポートすることによりファイルとしてダウンロードすることが可能です。
(左側のファイル一覧の各種ファイルは、三点リーダーからも一応ダウンロードできます)
ファイルのアップロード
ローカルファイルをアップロードして分析することも可能です。
左にある「+」を押下すれば、ドラッグ&ドロップするためのダイアログが表示されます。
csvファイルなどをアップロードすれば、Notebookでそちらを分析することも可能なようです。
ipynbファイルをアップロードすることも試してみましたが、SnowflakeのNotebookとして使えるのは、 notebook_app.ipynb
ファイルのみとなり、以下のように生のテキストとしてしか表示できませんでした。
スケジュール実行
スケジュール実行も設定することができます。以下の右上から「Create schedule」を押下することで可能となります。
スケジュール名と実行する頻度を設定することができます。
スケジュール自体はNotebook作成時に指定したスキーマのTaskに格納されているようです。
以下のようにタスク定義も確認することができます。
セッションの終了
Notebookは「Active」となっているとWHのクレジットが消費されますので、以下のように終わったら「End session」で停止されてください。
まとめ
いかがでしたでしょうか。Snowflake上でアドホックな処理を書きながら、可視化などまでできるのはとても便利だと思いました。
Git連携機能とかも気になるので、また試してみたいと思います。